﻿using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Core.Mapping;
using System.Data.Entity.Core.Metadata.Edm;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Pay.Data {
	/// <summary>
	/// 数据访问上下文初始化器。
	/// </summary>
	public sealed class DbContextInitailizer : DropCreateDatabaseIfModelChanges<PayContext> {
		// 请在使用DbContextInitailizer作为数据库初始化器（Database Initializer）时，去除以下代码行
		// 的注释，以便在数据库重建时，相应的SQL脚本会被执行。对于已有数据库的情况，请直接注释掉以下代码行。
		//protected override void Seed(DbContextHelper context)
		//{
		//    context.Database.ExecuteSqlCommand("CREATE UNIQUE INDEX IDX_CUSTOMER_USERNAME ON Customers(UserName)");
		//    context.Database.ExecuteSqlCommand("CREATE UNIQUE INDEX IDX_CUSTOMER_EMAIL ON Customers(Email)");
		//    context.Database.ExecuteSqlCommand("CREATE UNIQUE INDEX IDX_LAPTOP_NAME ON Laptops(Name)");
		//    base.Seed(context);
		//}

		/// <summary>
		/// 执行对数据库的初始化操作。
		/// </summary>
		public static void Initialize() {
			Database.SetInitializer<PayContext>(null);
			using (var dbcontext = new PayContext()) {
				var objectContext = ((IObjectContextAdapter)dbcontext).ObjectContext;
				var mappingCollection = (StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace);
				mappingCollection.GenerateViews(new List<EdmSchemaError>());
				//对程序中定义的所有DbContext逐一进行这个操作
			}
		}
	}
}
